package org.dbstar.scheduler.control;

import java.util.List;

import org.dbstar.scheduler.beans.JobConf;
import org.dbstar.scheduler.control.exception.DaoException;
import org.dbstar.scheduler.identifier.Identifier;


/**
 * 提供控制JobConf的接口方法
 * 
 * @author 代波
 * @since 1.0.0
 * @version 1.0.0
 * @date 2012-4-08
 */
public interface JobConfController {
	/**
	 * 获得所有JobConf的列表，所有JobConf按照catalogId,identifier顺序排列
	 * 
	 * @return JobConf列表，若无任何JobConf，返回size为0的List。
	 * @throws DaoException 对象操作发生未知异常时抛出
	 */
	public abstract List<JobConf> getAllJobConfs() throws DaoException;

	/**
	 * 获得指定目录下的所有JobConf的列表，所有JobConf按照identifier顺序排列
	 * 
	 * @param catalogId 指定的目录ID
	 * @return JobConf列表，若无任何JobConf，返回size为0的List。
	 * @throws DaoException 对象操作发生未知异常时抛出
	 */
	public abstract List<JobConf> getJobConfs(int catalogId) throws DaoException;

	/**
	 * 根据标识来查找指定的JobConf
	 * 
	 * @param identifier JobConf标识
	 * @return JobConf标识对应的JobConf，若JobConf不存在，则返回null。
	 * @throws DaoException 对象操作发生未知异常时抛出
	 */
	public abstract JobConf getJobConf(Identifier identifier) throws DaoException;

	/**
	 * 增加新的JobConf
	 * 
	 * @param jobConf 新JobConf
	 * @return 新增JobConf的标识
	 * @throws DaoException 对象操作发生未知异常时抛出
	 */
	public abstract Identifier addJobConf(JobConf jobConf) throws DaoException;

	/**
	 * 更新JobConf信息
	 * 
	 * @param jobConf 需要更新的JobConf
	 * @throws DaoException 对象操作发生未知异常时抛出
	 */
	public abstract void updateJobConf(JobConf jobConf) throws DaoException;

	/**
	 * 更新JobConf的平均执行耗时
	 * 
	 * @param identifier 待更新的JobConf标识
	 * @param averageRunTime 平均执行耗时
	 * @throws DaoException 对象操作发生未知异常时抛出
	 */
	public abstract void updateJobConfAverageRunTime(Identifier identifier, int averageRunTime) throws DaoException;

	/**
	 * 将指定的JobConf移动到新的Catalog下。
	 * 
	 * @param identifier 待移动的JobConf标识
	 * @param catalog 需要移动到的新的Catalog的ID
	 * @throws DaoException 对象操作发生未知异常时抛出
	 */
	public abstract void moveJobConf(Identifier identifier, int catalog) throws DaoException;

	/**
	 * 删除Id对应的JobConf
	 * 
	 * @param identifier JobConf标识
	 * @throws DaoException 对象操作发生未知异常时抛出
	 */
	public abstract void removeJobConf(Identifier identifier) throws DaoException;
}
